{ "cells": [ { "cell_type": "markdown", "id": "14204cb3", "metadata": {}, "source": [ "# Interpolate elevation along a profile\n", "\n", "O. Kaufmann, 2017-2023." ] }, { "cell_type": "code", "execution_count": 1, "id": "59710b96", "metadata": {}, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", "from geometron.geometries import cclength2xz\n", "import numpy as np" ] }, { "cell_type": "markdown", "id": "9cfb506f", "metadata": {}, "source": [ "## Create a list of lists of points along the profile\n", "The list is written like this : [[distance on the horizontal plane, elevation], …]. \n", "It can be derived from a on a map using intersections of the profile with elevation contours. \n", "Warning horizontal distances should be unique (no vertical…)" ] }, { "cell_type": "code", "execution_count": 2, "id": "bd2cb45d", "metadata": {}, "outputs": [], "source": [ "known_points=[[0,284],[58,280],[152,275],[217,270],[228,267],[305,265],[340,260], [374,255], [397,250], [417,245], [459, 240], [484, 245], [539, 250], [687, 245]]" ] }, { "cell_type": "markdown", "id": "e552ba8e", "metadata": {}, "source": [ "## Compute the length of a curve from known points using pchip approximation" ] }, { "cell_type": "code", "execution_count": 3, "id": "eccd6d18", "metadata": {}, "outputs": [], "source": [ "xz = cclength2xz(known_points, np.linspace(0,800,81))" ] }, { "cell_type": "markdown", "id": "22e1e41c", "metadata": {}, "source": [ "## Elevation of points evenly distributed along the profile" ] }, { "cell_type": "code", "execution_count": 4, "id": "f843f47b", "metadata": { "nbsphinx-thumbnail": { "tooltip": "Elevation of points evenly distributed along the profile" }, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA6UAAAHSCAYAAAAUmW0WAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/NK7nSAAAACXBIWXMAAAsTAAALEwEAmpwYAAA1QElEQVR4nO3de5hdVWE3/u9iyIUAAkJKKSEE3nKVSwIhEhEI5FFQqLEIio0KKKJ9tPXSnwrlocQioK9WlNZqU5VLiVrhVaTYizYmEiQVgyJyVaQBggoxSgADBJL1+2NO4iSZ20ky2TPD5/M855mz1157n3XOOjPky1p77VJrDQAAADRhq6YbAAAAwAuXUAoAAEBjhFIAAAAaI5QCAADQGKEUAACAxgilAAAANGbrphuQJLvsskudMGFC080AAABgANx2222/rrWO7W7foAilEyZMyKJFi5puBgAAAAOglPJgT/tM3wUAAKAxQikAAACNEUoBAABozKC4phQAAJLkueeey5IlS/LMM8803RRgI4wePTrjxo3LiBEj+n2MUAoAwKCxZMmSbL/99pkwYUJKKU03B2hDrTXLli3LkiVLstdee/X7ONN3AQAYNJ555pnsvPPOAikMQaWU7Lzzzm3PdBBKAQAYVARSGLo25vdXKAUAgE1w9tln5+677+61zvXXX99nnS1t2rRpWbRo0UYde+WVV+bd7353kuRzn/tcrr766h7rzp8/P7fcckuP+2+44YZ89KMfTZKceeaZue6669pqyyWXXNJW/WTd9vfH/Pnzc/LJJ7f9Ou1Y/zuyKf0z1AilAACwCT7/+c/nwAMP7LXOYAylm8s73/nOvOUtb+lxf2+h9Pnnn89rXvOanHvuuRv9+hsTSgejwfIdef7557f4awqlAAAMaQsXLsyll16ahQsXbvK5Fi9enP333z8zZ87MAQcckFNPPTUrVqxIksydOzeTJk3KwQcfnLe+9a159tlnk6w7orXddtvl/PPPz6GHHpojjzwyjz76aG655ZbccMMN+cAHPpCJEyfm5z//eS6//PIceOCBOeSQQ3L66adv0I5Vq1blAx/4QI444ogccsgh+ad/+qckyemnn55vfvOba+utGVnsqf78+fMzbdq0nHrqqWvfV611ndf64he/mPe+971rt//5n/8573vf+zZo0xVXXJF99903U6ZMyfe+97215bNmzconPvGJJNngfS1evDif+9znctlll2XixIlZsGBBzjzzzLzzne/MS1/60nzwgx/cYNTyv//7vzN58uTsu+++ufHGG5NsOLJ58sknZ/78+Tn33HPz9NNPZ+LEiZk5c2aS5JprrsmUKVMyceLEvOMd78iqVat6bX9Xt956a6ZOnZpJkyblZS97We67774N6vzmN7/Ja1/72hxyyCE58sgjc8cdd6z9HN761rdm2rRp2XvvvXP55ZevPeaiiy7Kfvvtl5e//OV54xvfuPbzWqO770iSXHvttZkyZUr23XffLFiwIEnP3431XX311TnkkENy6KGH5s1vfnOSDUeit9tuuySd35Ojjz46r3nNa3LggQfm3HPPzWc+85lu+/jjH//42te+8MILu33tttVaG38cfvjhFQAA7r777rbq33LLLXWbbbapHR0ddZtttqm33HLLJr3+//7v/9Yk9eabb6611nrWWWfVj3/84/Xpp5+u48aNq/fdd1+ttdY3v/nN9bLLLqu11nrsscfWH/zgB7XWWpPUG264odZa6wc+8IF60UUX1VprPeOMM+q111679nV22223+swzz9Raa/3tb3+7QTv+6Z/+ae2xzzzzTD388MPrAw88UL/2ta/Vt7zlLbXWWp999tk6bty4umLFih7rz5s3r77oRS+qDz/8cF21alU98sgj64IFC9Zp95NPPln33nvvunLlylprrVOnTq133HHHOu35xS9+UffYY4/62GOP1Weffba+7GUvq+9617tqrbVeeOGF9eMf/3iP76vr/jWfxUknnVSff/75WmutV1xxxdpznXHGGfWEE06oq1atqj/96U/r7rvvXp9++ul16tRa60knnVTnzZtXa6112223XVt+991315NPPnnte/nzP//zetVVV/Xa/q6WL19en3vuuVprrd/+9rfrKaecUmutdd68efWkk06qtdb67ne/u86aNavWWuvcuXProYceuvZ9Tp06tT7zzDN16dKl9cUvfnFduXJlvfXWW+uhhx5an3766frEE0/UP/7jP17n8+j6uXT9jhx77LH1/e9/f6211m9+85t1+vTptdaevxtd3XnnnXWfffapS5curbXWumzZsm5fY81nN2/evDpmzJi15/nhD39YjznmmLX1DjjggPrQQw/V//qv/6pvf/vb6+rVq+uqVavqSSedVL/73e9u8F66+z1Osqj2kAeNlAIAMGTNnz8/K1euzKpVq7Jy5crMnz9/k8+5xx575KijjkqSvOlNb8rNN9+c++67L3vttVf23XffJMkZZ5yRm266aYNjR44cufbaw8MPPzyLFy/u9jUOOeSQzJw5M9dcc0223nrDuzR+61vfytVXX52JEyfmpS99aZYtW5af/exnedWrXpV58+bl2WefzX/8x3/kmGOOyTbbbNNj/SSZMmVKxo0bl6222ioTJ07coE3bbbddjj/++Nx44425995789xzz+Xggw9ep873v//9TJs2LWPHjs3IkSPzhje8YaPe1xqnnXZaOjo6ut33+te/PltttVX22Wef7L333rn33nt7PM/65s6dm9tuuy1HHHFEJk6cmLlz5+aBBx7od/uXL1+e0047LQcddFDe97735a677tqgzs0337x25PH444/PsmXL8sQTTyRJTjrppIwaNSq77LJL/uAP/iCPPvpovve972XGjBkZPXp0tt9++/zJn/xJv9/PKaeckmTd71Jvfb3Gd77znZx22mnZZZddkiQvfvGL+3ytKVOmrL2Ny6RJk/LYY4/lF7/4RX784x9np512yh577JFvfetb+da3vpVJkyblsMMOy7333rvBa28M9ykFAGDImjZtWkaOHJmVK1dm5MiRmTZt2iafc/3VQ9tZTXTEiBFr63d0dPR4fd43v/nN3HTTTfm3f/u3XHzxxfnJT36yToirtebv//7vc8IJJ2xw7LRp0/Jf//Vf+dd//de1U397qj9//vyMGjVq7XZPbTr77LNzySWXZP/9989ZZ53V7/fbn/fVnW233bbHc3T3+W+99dZZvXr12rKebjlSa80ZZ5yRSy+9dJ3y66+/vl/tv+CCC3Lcccfl61//ehYvXtz296k/n/XGnK/ruXr7bvSl6+e4evXqrFy5cu2+9fvktNNOy3XXXZdf/epXa0N8rTXnnXde3vGOd2zU++mJkVIAAIasqVOnZu7cubnooosyd+7cTJ06dZPP+dBDD629PvVLX/pSXv7yl2e//fbL4sWLc//99ydJ/uVf/iXHHntsv8+5/fbb58knn0zSGQYefvjhHHfccfnYxz6W5cuX56mnnlqn/gknnJDPfvazee6555IkP/3pT/O73/0uSfKGN7whV1xxRRYsWJATTzyxz/r98dKXvjQPP/xwvvSlL+WNb3xjt/u/+93vZtmyZXnuuedy7bXXblCnp/fV9b33x7XXXpvVq1fn5z//eR544IHst99+mTBhQm6//fa1r3HrrbeurT9ixIi173v69Om57rrr8thjjyXpvP7zwQcf7Ff7k86R0t133z1J53Ws3Tn66KMzZ86cJJ2hf5dddsmLXvSiHt/PUUcdlX/7t3/LM888k6eeemrtdbLr6+/n1J++Pv7443Pttddm2bJlSTo/hySZMGFCbrvttiSdqx6vOUd33vCGN+QrX/lKrrvuupx22mlrX/uLX/zi2u/rI488svaz3hRGSgEAGNKmTp26WcLoGvvtt18+85nP5K1vfWsOPPDA/Pmf/3lGjx6dK664Iqeddlqef/75HHHEEXnnO9/Z73Oefvrpefvb357LL788X/nKV/K2t70ty5cvT601f/mXf5kdd9xxnfpnn312Fi9enMMOOyy11owdO3btaN8rX/nKvPnNb86MGTMycuTIPuv31+tf//rcfvvt2WmnnTbYt9tuu2XWrFmZOnVqdtxxx0ycOHGDOqtWrcqb3vSmDd7Xn/zJn+TUU0/NN77xjfz93/99n+0YP358pkyZkieeeCKf+9znMnr06Bx11FHZa6+9cuCBB+aAAw7IYYcdtrb+Oeeck0MOOSSHHXZY5syZk4985CN55StfmdWrV2fEiBH5zGc+kyOPPLLP9ifJBz/4wZxxxhn5yEc+kpNOOqnbOmsWNDrkkEMyZsyYXHXVVb2+nyOOOCKvec1rcsghh2TXXXfNwQcfnB122GGDel2/I73dFqc/ff2Sl7wk559/fo499th0dHRk0qRJufLKK/P2t789M2bMyKGHHpoTTzyx1xHrl7zkJXnyySez++67Z7fddkvS+d2755571v6+bbfddrnmmmvyB3/wB71+Bn0pdb3Vt5owefLk+kK5Bw8AAD275557csABBzT2+osXL87JJ5+cO++8s7E2NOXkk0/O+973vkyfPr3ppgw7Tz31VLbbbrusWLEixxxzTGbPnr1OsB5uuvs9LqXcVmud3F1903cBAOAF7PHHH8++++6bbbbZRiAdIOecc04mTpyYww47LK973euGdSDdGKbvAgBAy4QJE15wo6Q77rhjfvrTnzbdjGHtS1/6UtNNGNSMlAIAANAYoRQAAIDGCKUAAAA0RigFAACgMUIpAAC0LF68OAcddFDTzdgkL3vZy/qs86lPfSorVqzYAq2BvgmlAAAMXXPmJBMmJFtt1flzzpymW9S4W265pc86QimDiVAKAMDQNGdOcs45yYMPJrV2/jznnM0WTB944IFMmjQpP/jBD3LllVfmlFNOyYknnph99tknH/zgB9fW+/KXv5yDDz44Bx10UD70oQ8lSa699tq8//3vT5J8+tOfzt577732nEcddVSSztvPXHjhhTnssMNy8MEH5957792gDVdeeWVmzJiRadOmZZ999smHP/zhtfs++clP5qCDDspBBx2UT33qU2vLt9tuuyTJ/PnzM23atJx66qnZf//9M3PmzNRac/nll+cXv/hFjjvuuBx33HFZtWpVzjzzzBx00EE5+OCDc9lll22Wzw/6y31KAQAYms4/P1l/tG/Fis7ymTM36dT33XdfTj/99Fx55ZU59NBDc9ddd+X222/Pj370o4waNSr77bdf/uIv/iIdHR350Ic+lNtuuy077bRTXvnKV+b666/P0Ucfnf/7f/9vkmTBggXZeeed88gjj2TBggU55phj1r7OLrvskh/+8If5x3/8x3ziE5/I5z//+Q3acuutt+bOO+/MmDFjcsQRR+Skk05KKSVXXHFFvv/976fWmpe+9KU59thjM2nSpHWO/dGPfpS77rorf/RHf5Sjjjoq3/ve9/KXf/mX+eQnP5l58+Zll112yW233ZZHHnlk7f1ZH3/88U367KBdRkoBABiaHnqovfJ+Wrp0aWbMmJE5c+bk0EMPXVs+ffr07LDDDhk9enQOPPDAPPjgg/nBD36QadOmZezYsdl6660zc+bM3HTTTfnDP/zDPPXUU3nyySfz8MMP58/+7M9y0003ZcGCBTn66KPXnvOUU05Jkhx++OFZvHhxt+15xStekZ133jnbbLNNTjnllNx88825+eab86d/+qfZdttts9122+WUU07JggULNjh2ypQpGTduXLbaaqtMnDix29fYe++988ADD+Qv/uIv8p//+Z950YtetEmfH7RLKAUAYGgaP7698n7aYYcdMn78+Nx8883rlI8aNWrt846Ojjz//PO9nudlL3tZrrjiiuy33345+uijs2DBgixcuHDt9N2u5+ztfKWUXrd7058277TTTvnxj3+cadOm5XOf+1zOPvvsfp8fNgehFACAoenii5MxY9YtGzOms3wTjBw5Ml//+tdz9dVX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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots(figsize=(16,8))\n", "ax.plot(xz.T[0], xz.T[1], '.k', label='points evenly distributed along the curve')\n", "ax.plot(np.array(known_points).T[0],np.array(known_points).T[1], 'or', label='known points')\n", "ax.axis('equal')\n", "ax.legend()" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.13" } }, "nbformat": 4, "nbformat_minor": 5 }